import createElement from "./createElement";

export default function patchVnode (oldVnode,newVnode){
    // newVnode有text属性，没有子节点
    if(newVnode.text && (newVnode.children === undefined || newVnode.children.length === 0)){
        // 改变dom(oldVnode.elm是要改变的dom元素)
        oldVnode.elm.innerText = newVnode.text
    }else if(newVnode.text === undefined && (newVnode.children!=undefined||newVnode.children.length > 0)){
        // 新节点有子节点，但是老节点没有子节点
        if(oldVnode.children == undefined||oldVnode.children.length === 0){
            oldVnode.elm.innerText = ''
            console.log('111',oldVnode.elm)
            for (let i = 0;i<newVnode.children.length;i++){
                oldVnode.elm.appendChild(createElement(newVnode.children[i]))
            }
        }else{
            // 新节点有子节点，老节点也有子节点
            let un = 0 // 未处理的节点的指针
            for(let i = 0;i<newVnode.children.length;i++){
                let ch = newVnode.children[i]
                let flag = false
                for(let j = 0;j<oldVnode.children.length;j++){
                    if(ch.sel === oldVnode.children[j].sel && ch.key === oldVnode.children[j].key){
                        flag = true
                    }
                }
                if(!flag){
                    let dom = createElement(ch)
                    ch.elm = dom
                    console.log(ch,i)
                    // 插入到已处理之后(应该改成插入到所有未处理之前)
                    // oldVnode.elm.insertBefore(dom,oldVnode.children[i].elm)
                    // 插入到未处理节点之前
                    if(un<oldVnode.children.length){
                        oldVnode.elm.insertBefore(dom,oldVnode.children[un].elm)
                    }else{
                        oldVnode.elm.appendChild(dom)
                    }
                }else{
                    un++
                }
            }

        }
    }
}
